#pragma once

#include <map>
#include "molecular_atom.h"

#define PAN_HOTKEY_MANAGER  _T("atom_hotkey_manager")

enum {
    PFI_HOTKEY_MANAGER_BASE             = 500,

    // Param = HWND
    PFI_SET_HOTKEY_WINDOW,

    // Param = PokeHotkeyInfo *
    PFI_CREATE_HOTKEY,

    // Param = int
    PFI_DESTROY_HOTKEY,

    // Param = int, IOParam = PokeHotkeyKey *
    PFI_PUBLISH_HOTKEY,

    // Param = int
    PFI_ON_HOTKEY,

    // Param = int, IOParam = PokeHotkey
    PFI_GET_HOTKEY,

    // Param = CString *, IOParam = PokeHotkey
    PFI_GET_HOTKEY_BY_DESC,

    // Param = HotkeyList *
    PFI_GET_ALL_HOTKEY,

    // Param = int
    PFI_ON_HOTKEY_CALLBACK,
};


struct PokeHotkeyInfo {
    int m_nHotkeyId;
    M::String m_strAtomName;
    CString m_strDesc;

    PokeHotkeyInfo() : m_nHotkeyId(0) {}
};

struct PokeHotkeyKey {
    int m_nModifier;
    int m_nKey;

    PokeHotkeyKey()
        : m_nModifier(0), m_nKey(0)
    {}
};

struct PokeHotkey {
    PokeHotkeyInfo m_oInfo;
    PokeHotkeyKey m_oKey;
};

typedef std::map<int, PokeHotkey> PokeHotkeyList;